使用Mongo Shell通过SSL加密连接数据库

在使用Mongo Shell连接数据库时,您可以启用SSL(Secure Sockets Layer)加密功能提高数据链路的安全性。通过SSL加密功能可以在传输层对网络连接进行加密,在提升通信数据安全性的同时,保障数据的完整性。

前提条件

  • 实例类型为副本集实例或云盘版分片集群实例。

    说明

    如果版本过低,您可以升级数据库大版本

  • 实例已开启SSL加密功能,详情请参见设置SSL加密

  • 待连接数据库的本地服务器或ECS实例上已安装3.0及以上版本的Mongo Shell。安装步骤请参见Install MongoDB

  • 待连接数据库的本地服务器或ECS实例的IP地址已加入到MongoDB实例的白名单中,详情请参见修改白名单

注意事项

  • 由于SSL加密的固有缺陷,启用SSL加密会显著增加CPU使用率,建议在有加密需求时才开通SSL加密(例如通过公网连接MongoDB实例)。

    说明

    内网链路相对较安全,一般无需对链路加密。

  • 实例开通SSL加密后,如果修改了实例的连接地址或申请了新的连接地址(包括新的节点连接地址和公网地址),新地址将无法使用SSL加密连接。如果想要新地址也使用SSL加密连接,您需要更新服务器证书

操作步骤

本案例以Linux操作系统为例演示具体操作流程。

  1. 下载SSL CA证书,详情请参见设置SSL加密

  2. 将解压后的证书文件上传至安装有Mongo Shell的本地服务器或ECS实例中。

    说明

    本案例中,将.pem证书文件上传至本地服务器的/test/sslcafile/目录中。

  3. 在安装有Mongo Shell的本地服务器或ECS实例中,执行以下命令连接MongoDB数据库。

    mongo --host <host> -u <username> -p --authenticationDatabase <database> --ssl --sslCAFile <sslCAFile_path> --sslAllowInvalidHostnames
    说明
    • <host>:Primary节点或Secondary节点的连接地址(含端口号),详情请参见副本集实例连接说明

      • 如需通过公网连接数据库,需要申请公网连接地址,详情请参见申请公网连接地址

      • 如需通过内网地址连接数据库,需要确保ECS实例与MongoDB实例的网络类型相同(如果是专有网络,需要在同一VPC中)。

    • <username>:MongoDB实例的数据库账号,初始账号为root。不建议在生产环境中直接使用root账号连接数据库。您可以根据业务需求创建用户并分配权限,详情请参见MongoDB数据库账号权限管理

    • <database>:鉴权数据库名,即数据库账号所属的数据库。当数据库账号为root时,对应的数据库为admin。

    • <sslCAFile_path>:SSL证书文件路径。

    • --sslAllowInvalidHostnames:表示禁用TLSSSL证书中的主机名验证,允许连接到主机名不匹配的服务器。如果SSL加密要求主机名验证,则不要添加该参数配置。

    示例:

    数据库账号为test,所属数据库为admin。

    mongo --host dds-bp19f409d7512****-pub.mongodb.rds.aliyuncs.com:3717 -u test -p --authenticationDatabase admin --ssl --sslCAFile /test/sslcafile/ApsaraDB-CA-Chain.pem  --sslAllowInvalidHostnames
  4. 当命令行提示Enter password:时,请输入数据库账号对应的密码并按回车键确认。

    说明
    • 输入密码时,密码字符是不可见的。

    • 如果忘记了root账号的密码,您可以通过设置密码的方式来重置密码。

常见的连接场景